<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>延伸函数环境生命周期</title>
</head>
<body>
    <script>
        // 这样不能让b实现累加，因为每调用一次test函数，都会开辟一块新的空间
        // function test(){
        //     let a = 1
        //     function show(){
        //         let b = ++a;
        //         console.log(b);
        //     }
        //     show();
        // }
        // test();
        // test();
        // test();


        // 如果环境定义的数据在被使用，它就不删！
        // 将内部的函数返回出去，再进行多次调用，可实现累加
        // 如果 show函数被保留了，a也会被保留
        // function test(){
        //     let a = 1
        //     return function show(){
        //         let b = ++a;
        //         console.log(b);
        //     }
        // }
        // let m = test();
        // m();
        // m();



        // 不会实现累加虽然ss函数返回出去了，但内部的pp依旧只是一个没有返回出去的函数，每次调用pp,都会开辟一个空间
        // function tt(){
        //     let a = 1;
        //     return function ss(){
        //         let b = 1;
        //         function pp(){
        //             let c = ++b;
        //             console.log(c);
        //         };
        //         pp();
        //     }
        // }
        // let n = tt();
        // n();
        // n();
        // n();



        // 如果环境定义的数据在被使用，它就不删！
        // 如果想让pp实现累加，必须要把pp返回出去
        // 如果pp函数被保留了，b也会被保留，如果ss函数被保留了，a也会被保留
        function tt(){
            let a = 1;
            return function ss(){
                let b = 1;
                return function pp(){
                    let c = ++b;
                    console.log("c"+c);
                    console.log("a"+(++a));
                };
            }
        }
        let n = tt();
        let p = n();
        p();
        p();
        p();
        p();
    </script>
</body>
</html>